import runtimeType from '../../sys/runtimeType';
import toObject from '../../data/toObject';

/**
 * 【同步方法】操作应用短期临时缓存数据
 * @param type 处理方式，值域解释：get-获取、set-设置、clear-清除全部
 * @param data 要处理的数据，要求为对象数据格式，或者是json格式的字符串
 * @return 操作成功与否、或者是读取到的缓存数据
 */
function cacheShort(type = 'get', data = {}) {
    
    // 初始化返回数据
    let data_return = null;
    // 临时变量名
    let str_name = '$focus_storage_cacheShort';
    
    // 获取当前运行环境
    let runType = runtimeType();
    // 如果是“非UNI”环境
    if (runType == 'NOT-UNI')
    {
        // 设置缓存
        if (type == 'set')
        {
            // 转换data参数数据格式为json
            let obj_dataCan = toObject(data);
            // 如果转换成功
            if (obj_dataCan) {
                // 将代码放入try，避免报错
                try {
                    // 先假设缓存的数据为空数据
                    let data_storage = {};
                    // 读取设备上的临时缓存
                    let save_storage = sessionStorage.getItem(str_name);
                    // 如果数据存在，那么转换为json
                    if (save_storage) { data_storage = toObject(save_storage); }
                    // 合并"已经保存的数据"和"准备保存的数据"
                    let obj_together = Object.assign({}, data_storage, obj_dataCan);
                    // 特例缓存 保存api
                    sessionStorage.setItem(str_name, JSON.stringify(obj_together));
                    // 标识为"处理成功"
                    data_return = { "result": true };
                }
                catch (e) {}
            }
        }
        // 清除全部缓存
        else if (type == 'clear')
        {
            // 清除本特例缓存，并且标识为"处理成功"
            try { sessionStorage.removeItem(str_name); data_return = { "result": true }; }
            catch (e) {}
        }
        // 其它默认为读取缓存
        else {
            // 将代码放入try，避免报错
            try {
                // 读取设备上的临时缓存
                let save_storage = sessionStorage.getItem(str_name);
                // 数据存在，赋值到结果数据
                if (save_storage) { data_return = toObject(save_storage); }
            }
            catch (e) {}
        }
    }
    // 如果是UNI环境
    else {
        // APP对象实体
        let myapp = getApp();
        // 设置缓存
        if (type == 'set')
        {
            // 转换data参数数据格式为json
            let obj_dataCan = toObject(data);
            // 如果转换成功
            if (obj_dataCan) {
                // 初始化 app实例全局变量
                if (!myapp.globalData[str_name]) { myapp.globalData[str_name] = {}; }
                // 合并"已经保存的数据"和"准备保存的数据"
                let obj_together = Object.assign({}, myapp.globalData[str_name], obj_dataCan);
                // app实例全局变量 覆盖赋值
                myapp.globalData[str_name] = obj_together;
                // 标识为"处理成功"
                data_return = { "result": true };
            }
        }
        // 清除全部缓存
        else if (type == 'clear')
        {
            // 将数据设置成 null
            myapp.globalData[str_name] = null;
            // 标识为"处理成功"
            data_return = { "result": true };
        }
        // 其它默认为读取缓存
        else {
            // 获取app实例全局变量
            let obj_appGlobal = myapp.globalData[str_name];
            // 如果有数据，让结果数据等于实例全局变量
            if (obj_appGlobal) { data_return = obj_appGlobal; }
        }
    }
    
    // 返回结果数据
    return data_return;
}

export default cacheShort;